/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucuenca.ec.nosql.controller;

import edu.ucuenca.ec.nosql.conexion.DriverMongoDB;
import edu.ucuenca.ec.nosql.modelos.Producto;
import edu.ucuenca.ec.nosql.security.CarritoSession;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author mivkys
 */
@ManagedBean(name = "productosController")
@SessionScoped
public class ProductosController implements Serializable {

    private Producto selected;
    private List<Producto> itemsProductos;
    private Producto buscado;
    private String idbuscado;
    private String group = " Book";
    private List<String> listGroup;

    public ProductosController() {
    }

    @PostConstruct
    public void init() {
        System.out.println("posconstruc productocontroller");
        if (CarritoSession.getAllProductos() == null || CarritoSession.getAllProductos().isEmpty()) {
            DriverMongoDB.setDB_Mongo("online");
            itemsProductos = DriverMongoDB.find("producto", "group", group);
            CarritoSession.setAllProductos(itemsProductos);
        } else {
            itemsProductos = CarritoSession.getAllProductos();
        }
        cargarGroups();
    }

    private void cargarGroups() {
        Set<String> sets = new HashSet<>();
        for (Producto allProducto : itemsProductos) {
            sets.add(allProducto.getGroup());
        }
        listGroup = new ArrayList<>(sets);
    }

    public void actualizar() {
        DriverMongoDB.setDB_Mongo("online");
        itemsProductos = DriverMongoDB.find("producto", "group", group);
        CarritoSession.setAllProductos(itemsProductos);
    }

    public void flush() {
        System.out.println("si flush");
        if (CarritoSession.getAllProductos() != null) {
            itemsProductos = CarritoSession.getAllProductos();
        }
    }

    public void similar(Producto item) {
        selected = item;
    }

    public List<Producto> similares() {
        System.out.println("Similares");
        List<Producto> similares = new ArrayList<>();
        DriverMongoDB.setDB_Mongo("online");
        if (selected != null && selected.getSimilars() != null) {
            for (String similar : selected.getSimilars()) {
                List<Producto> producto = DriverMongoDB.find("producto", "ASIN", similar);
                if (producto != null && !producto.isEmpty()) {
                    similares.add(producto.get(0));
                }
            }
        }
        return similares;
    }

    public void busqueda() {
        //ASIN
        System.out.println("Si llega a buscar");
        if (idbuscado!=null && !idbuscado.isEmpty()) {
            System.out.println("es el codigo: "+ idbuscado);
            DriverMongoDB.setDB_Mongo("online");
            List<Producto> producto = DriverMongoDB.find("producto", "ASIN", idbuscado);
            if (producto != null && !producto.isEmpty()) {
                buscado = producto.get(0);
                System.out.println("el producto" +buscado);
            }
        }

    }

    public int conversion(double avg) {
        return (int) avg;
    }

    /**
     * @return the selected
     */
    public Producto getSelected() {
        return selected;
    }

    /**
     * @param selected the selected to set
     */
    public void setSelected(Producto selected) {
        this.selected = selected;
    }

    /**
     * @return the itemsProductos
     */
    public List<Producto> getItemsProductos() {
        return itemsProductos;
    }

    /**
     * @param itemsProductos the itemsProductos to set
     */
    public void setItemsProductos(List<Producto> itemsProductos) {
        this.itemsProductos = itemsProductos;
    }

    /**
     * @return the listGroup
     */
    public List<String> getListGroup() {
        return listGroup;
    }

    /**
     * @param listGroup the listGroup to set
     */
    public void setListGroup(List<String> listGroup) {
        this.listGroup = listGroup;
    }

    /**
     * @return the group
     */
    public String getGroup() {
        return group;
    }

    /**
     * @param group the group to set
     */
    public void setGroup(String group) {
        this.group = group;
    }

    /**
     * @return the buscado
     */
    public Producto getBuscado() {
        return buscado;
    }

    /**
     * @param buscado the buscado to set
     */
    public void setBuscado(Producto buscado) {
        this.buscado = buscado;
    }

    /**
     * @return the idbuscado
     */
    public String getIdbuscado() {
        return idbuscado;
    }

    /**
     * @param idbuscado the idbuscado to set
     */
    public void setIdbuscado(String idbuscado) {
        this.idbuscado = idbuscado;
    }

}
